/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package designpattern.creational_patterns;

/**
 *
 * @author anh_yeu_em_nhieu_lam
 */
public class SingletonPattern {
    private static SingletonPattern _instance;
    private SingletonPattern() {
        System.out.print("Hello boy ^^!");
    }
    public static SingletonPattern getInstance(){
        if(_instance == null){
	   //Không được dùng this._instance T_T
            _instance = new SingletonPattern();
        }
        return _instance;
    }
    /*
     * Trong java một inner class nếu không phải là class static thì 
     * các member không được chứa từ khóa static , nên từ đó không thể
     * áp dụng Singleton cho một inner class được , nhưng thay vào đó
     * ta có thể cho 1 inner class trở thành static class với từ khóa static
     * thì cũng gần tương tự như ta dùng Singleton (vì static class cũng chỉ
     * được tạo một lần)
     * */
    public static class InnerSingletonClass{
        private static InnerSingletonClass _instance;
        private InnerSingletonClass() {
        }
        public static InnerSingletonClass getInstance() {
            if(_instance == null){
                _instance = new InnerSingletonClass();
            }
            return _instance;
        }
    }
    //
    //
    public static void main(String args[]){
        //Trong phương thức main có thể khởi tạo bất kì đối tượng của lớp nào
        //kể cả lớp có từ khóa private ở constructor vì ...
        new SingletonPattern();
        SingletonPattern.getInstance();
    }
}
/*
Hello boy ^^!Hello boy ^^!
 * */